#ifndef __CRYPTASYMCIPHERAP_H__
#define __CRYPTASYMCIPHERAP_H__

	extern UINT16 CryptAsymCipherAP_GenRSAKeyPair(UINT8 *pInBuf, UINT8 *pOutBuf, UINT8 IsSignKey, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_ImportRSAKeyPair(UINT8 *pInBuf, UINT16 nSize, UINT8 IsHeader, UINT8 IsLast);
	extern UINT16 CryptAsymCipherAP_RSASignData(UINT8 AlgHash, UINT8 *pInBuf, UINT16 nSize, UINT8 IsSignKey, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_RSAVerify(UINT8 AlgHash, UINT8 *pInBuf);
	extern UINT16 CryptAsymCipherAP_RSAExportSessionKey(UINT8 IsFull, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_RSAExportSessionKeyEx(UINT8 IsFull, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_ExtRSAPubKeyOperation(UINT8 Mode, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);

	extern UINT16 CryptAsymCipherAP_GenECCKeyPair(UINT8 SubType, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_ImportSM2KeyPair(UINT8 *pInBuf, UINT16 nSize);
	extern UINT16 CryptAsymCipherAP_ECCSignData(UINT8 AlgHash, UINT8 *pInBuf, UINT16 nSize, UINT8 IsSignKey, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_ECCVerify(UINT8 SubType, UINT8 AlgHash, UINT8 *pInBuf);
	extern UINT16 CryptAsymCipherAP_SM2ExportSessionKey(UINT8 IsFull, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_SM2ExportSessionKeyEx(UINT8 IsFull, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_ExtSM2Encrypt(UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);

	extern UINT16 CryptAsymCipherAP_GenerateAgreementDataWithSM2(UINT8 IsExchangeKey, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_GenerateAgreementDataAndKeyWithSM2(UINT8 IsExchangeKey, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_GenerateKeyWithSM2(UINT8 IsExchangeKey, UINT8 *pInBuf, UINT8 *pOutBuf, UINT16 *pLen);

	extern UINT16 CryptAsymCipherAP_ExportPublicKey(UINT8 *pInBuf, UINT8 IsSignKey, UINT8 *pOutBuf, UINT16 *pLen);
	extern UINT16 CryptAsymCipherAP_ImportSessionKey(UINT8 *pInBuf, UINT8 IsSignKey, UINT16 nSize, UINT8 *pOutBuf);

#endif
